home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / PATHENV.D < prev    next >
Encoding:
Modula Definition  |  1990-11-16  |  6.2 KB  |  136 lines

  1. DEFINITION MODULE PathEnv;
  2.  
  3. (*
  4.  * Globale Variable zur Festlegung und Abfrage der Pfad-Umgebung:
  5.  *
  6.  *  - HomePath
  7.  *  - SelectFile
  8.  *)
  9.  
  10. FROM MOSGlobals IMPORT PathStr, FileStr;
  11.  
  12. CONST   HomeSymbol = '*';
  13.           (*
  14.            * Wird von 'SearchFile' und 'FullName' durch den 'HomePath'
  15.            * ersetzt.
  16.            *)
  17.  
  18. VAR     HomePath: PathStr;
  19.   (*
  20.    * Liefert den vollst. Pfadnamen, der zum Zeitpunkt des Programmstarts
  21.    * aktiv war. Dies ist in der Regel auch der Pfad, von dem das Programm
  22.    * gestartet wurde, und in dem sich normalerweise auch dessen Zusatz-
  23.    * dateien, wie z.B. die Resource-Datei, befinden.
  24.    *
  25.    * Allerdings ist es auch möglich, ein Programm so zu starten, daß
  26.    * das aktuelle Verzeichnis nicht das ist, von dem das Programm stammt.
  27.    * Beispielsweise kann dies im Desktop (ab TOS 1.4) erreicht werden,
  28.    * indem das Programm in einem unten liegenden Fenster doppelt
  29.    * angelickt wird, und dabei die rechte Maustaste festgehalten wird.
  30.    * Damit die beim Programm befindlichen Dateien dann trotzdem noch
  31.    * gefunden werden, ist entweder 'AESMisc.ShellFind' zu benutzen
  32.    * oder dieser HomePath zu berücksichtigen. Soll beispielsweise
  33.    * die Funktion 'Paths.SearchFile' verwendet werden, dürfen die
  34.    * Pfade der Suchliste mit dem HomeSymbol ("*") beginnen - dies wird
  35.    * dann automatisch durch den HomePath ersetzt.
  36.    *
  37.    * Bei GEM-Programmen wird der HomePath automatisch bei Aufruf von
  38.    * 'GEMEnv.InitGem' initialisiert. Sonst muß er manuell, z.B. durch
  39.    * 'Directory.GetDefaultPath (HomePath)', initialisiert werden.
  40.    * Vorsicht beim manuellen Setzen: Der Pfad muß mit einem '\' oder ':'
  41.    * abgeschlossen sein - ggf. Directory.ValidatePath anwenden!
  42.    *
  43.    * ACHTUNG:
  44.    *   Bei InitGem kann u.U. der falsche Pfad eingesetzt werden: Wenn das
  45.    * Programm, das InitGem aufruft, nicht vom Desktop sondern einem anderen
  46.    * Prg. gestartet wurde, das dazu aber nicht 'ShellWrite' aufrief,
  47.    * wird als HomePath der Pfad eingesetzt, von dem das aufrufende Programm
  48.    * stammt, sofern dies vom Desktop gestartet wurde. Letztendlich heißt
  49.    * das: Wer GEM-Programme startet, muß eigentlich mit ShellWrite Pfad
  50.    * und Argumente übermitteln. Das aufgerufene GEM-Programm erfragt diese
  51.    * Informationen ggf. dann mit ShellRead. Wird der ShellWrite-Aufruf
  52.    * unterlassen, bleiben die Informationen vom vorigen Aufruf bestehen
  53.    * und man erhält bei ShellRead die falschen Daten. Da das Desktop auf
  54.    * immer ShellWrite benutzt, sind es dann meist die Daten es dort gestar-
  55.    * teten Programms. Das alternative Desktop-Programm "GEMINI" verhält sich
  56.    * korrekt, bisherige Neodesk-Versionen (auch ein Desktop) dagegen verwenden
  57.    * nicht ShellWrite: Startet man von dort ein MM2-Programm, z.B. die
  58.    * MM2Shell, findet sie ihre Dateien nicht auf den Pfaden, die mit dem
  59.    * HomePath-Symbol ("*") versehen sind, weil sie dann den HomePath von
  60.    * Neodesk verwendet.
  61.    * Ob ein Programm ShellWrite korrekt verwendet, kann leicht geprüft werden:
  62.    * Man starte von dort die MM2Shell und sehe sich den Shell-Pfad (in den
  63.    * Umgebungsinformationen) an. Wenn er den Pfad enthält, in dem die Shell
  64.    * auch steht, ist es korrekt. Wenn dort der Pfad des anderen Programms
  65.    * steht, hat es ShellWrite nicht benutzt.
  66.    * Wenn Sie diesen "Fehler" vermeiden wollen, setzen Sie den HomePath
  67.    * mit 'Directory.GetDefaultPath (HomePath)' nach dem InitGem-Aufruf
  68.    * neu. Dann wird immer der aktuelle Pfad verwendet, der zumindest von
  69.    * fast jedem GEM-aufrufenden Programm auf den Pfad gesetzt wird, worin
  70.    * das Prg steht.
  71.    * Oder verwenden Sie nicht den HomePath (keine "*" in den Pfadlisten)!
  72.    *)
  73.  
  74. PROCEDURE ReplaceHome ( VAR pathOrName: ARRAY OF CHAR );
  75. PROCEDURE HomeReplaced ( REF pathOrName: ARRAY OF CHAR ): FileStr;
  76.   (*
  77.    * Wandeln einen Datei- oder Pfadnamen in Großbuchstaben und setzen den
  78.    * aktuellen 'HomePath' ein, falls das Zeichen 'HomeSymbol' an Anfang
  79.    * enthalten ist.
  80.    *
  81.    * Wird ein vollständiger Pfadname, incl. Laufwerk und Pfad vom Root-Dir
  82.    * benötigt, muß zusätzlich danach 'Directory.MakeFullPath' aufgerufen
  83.    * werden.
  84.    *)
  85.  
  86.                         (*  Dateiauswahlroutine  *)
  87.                         (*  ===================  *)
  88.  
  89. (* Im Folgenden wird die Möglichkeit geboten, eine beliebige
  90.  * Dateiauswahlroutine systemweit zugänglich zu machen.
  91.  *
  92.  * Eine solche Routine bekommt einen Pfad ('path') und einen
  93.  * Dateinamen ('name') übergeben und sollte dem Benutzer da-
  94.  * raufhin die Gelegenheit bieten, beide zu verändern. Als Re-
  95.  * sultat sollte sie die neuen Zeichenketten zurückgeben und
  96.  * zusätzlich einen BOOLEAN-Wert ('ok') liefern, der angibt,
  97.  * ob der Anwender seine Wahl erfolgreich getroffen hat.
  98.  *
  99.  * Die Prozedurvariable wird bei Aufruf von 'GEMEnv.InitGem'
  100.  * automatisch mit der vom AES bereitgestellten Prozedur
  101.  * 'AESMisc.FileSelect' bzw. 'AESMisc.FileSelectExtended'
  102.  * (je nach GEM-/TOS-Version) initialisiert. In anderen Fällen
  103.  * muß sie gesondert initialisiert werden. Ansonsten geschieht
  104.  * beim Aufruf nichts und 'ok' wird immer FALSE.
  105.  *
  106.  * ACHTUNG: 'path' muß mindestens 64 Zeichen und 'name' mindestens
  107.  *   12 Zeichen fassen können, sonst wird ein Laufzeitfehler
  108.  *   ausgelöst.
  109.  *
  110.  * ACHTUNG: Die Definition wurde auf das TOS 1.4 angepaßt.
  111.  *   Dabei ist der Parameter 'title' hinzugekommen. Dort kann
  112.  *   nun eine Überschrift für die Dateiauswahlbox angegeben werden.
  113.  *   Wird das Modula-System auf einem Rechner gestartet, der ein
  114.  *   älteres TOS besitzt, so wird die alte Dateiauswahlbox benutzt
  115.  *   und 'title' bleibt ungenutzt.
  116.  *)
  117.  
  118. TYPE  FileSelectProc = PROCEDURE ( REF (* title: *) ARRAY OF CHAR,
  119.                                    VAR (* path:  *) ARRAY OF CHAR,
  120.                                    VAR (* name:  *) ARRAY OF CHAR,
  121.                                    VAR (* ok:    *) BOOLEAN );
  122.  
  123. VAR   SelectFile: FileSelectProc;
  124.         (*
  125.          * Die Datei-Auswahlroutine.
  126.          *)
  127.  
  128. PROCEDURE NoSelect (REF d:ARRAY OF CHAR; VAR a,b:ARRAY OF CHAR; VAR c:BOOLEAN);
  129.   (*
  130.    * Diese Prozedur kann auf 'SelectFile' zugewiesen werden. Sie kehrt
  131.    * immer sofort zurück und setzt 'ok' auf FALSE, so daß praktisch "?"
  132.    * in Pathlisten ignoriert werden.
  133.    *)
  134.  
  135. END PathEnv.
  136.